#pragma once
#include "res.h"
#include "chess_man.h"

constexpr float 格子宽度 = 80; // 包含线条
constexpr float 线条宽度 = 4;
constexpr Position 格子大小 = { 格子宽度, 格子宽度 };
constexpr float 位线间隔 = 8;
constexpr float 位线宽度 = 4;
constexpr float 位线长度 = 10;
constexpr float 棋子宽度 = 60;

// 颜色定义
constexpr Color 格子颜色 = createColor(232, 205, 168, 255);
constexpr Color 线条颜色 = createColor(170, 126, 91, 255);
constexpr Color 棋盘字体颜色 = createColor(129, 102, 77, 255);
constexpr Color 棋盘字体颜色描边 = createColor(159, 132, 107, 255);

constexpr Size 棋盘线条数 = { 9, 10 };
constexpr Size 棋盘格子数 = { 8, 9 };
constexpr Size 棋盘像素大小 = 棋盘格子数 * (unsigned)格子宽度;
constexpr Position 棋盘偏移 = { 0, 棋盘像素大小[1] * -0.5f };

class ChessBoard
{
public:
	ChessBoard();
	~ChessBoard();

	void Render();

	void SetParent(Coor* parent)
	{
		_coor->SetParent(parent);
	}

	static Position Xy2Pos(const Point& xy)
	{
		return { xy[0] * 格子宽度, xy[1] * 格子宽度 };
	}
	static Position Xy2Pos(int x, int y)
	{
		return { x * 格子宽度, y * 格子宽度 };
	}

	void New();

	void SetMan(const PointU& xy, ChessManType type)
	{
		ChessMan man{ type };
		man.SetParent(_coor);
		man.SetXy(xy);
		_vecMan.GetRef(xy[1], xy[0]) = man;
	}
private:
	Coor* _coor;
	gcText _txtChuhe;
	gcText _txtHanjie;

	Array2<ChessMan, 棋盘线条数[0], 棋盘线条数[1]> _vecMan;

	void _render_loc(const Point& xy, bool left = true, bool right = true);
};